package com.huang.leetcode.tree;

import com.huang.leetcode.constant.TreeNode;

/**
 * @Author：CreateSequence
 * @Date：2020-07-24 22:25
 * @Description：验证二叉搜索树
 */
public class PB98 {

    public boolean isValidBST(TreeNode root) {
        return isBST(root, Long.MAX_VALUE, Long.MIN_VALUE);
    }

    public boolean isBST(TreeNode treeNode, Long max, Long min) {

        //如果抵达叶子节点则返回true
        if (treeNode == null) {
            return true;
        }

        //判断当前节点值是否在区间中
        if (!(treeNode.val < max && treeNode.val > min)) {
            return false;
        }

        //向左递归，最大值为当前节点值
        if (!isBST(treeNode.left, (long) treeNode.val, min)) {
            return false;
        }
        //向右递归，最小值为当前节点值
        if (!isBST(treeNode.right, max, (long) treeNode.val)) {
            return false;
        }
        return true;
    }

}
